#!/bin/sh  
  
# tail -f 动态抓取日志  
# usage: 
  

# 获取今天的 yyyy-mm-dd  
d=$(date "+%Y-%m-%d")
echo $d
  
  
# 取文件的inode  
#INODE=$(stat -c "%i" "$FILE")  
  

# 启动tail -f进程，并打印信息  
# usage: fork_tail  
fork_tail()  {  
    
    # 取文件 参数  
    FILE="/data/logs/Khw-SSO/Khw-SSOException.log."$(date "+%Y-%m-%d") 
    INODE=$(stat -c "%i" "$FILE")  

    if [ -r "$FILE" ]; then  
        tail -f "$FILE" &  
        PID=$!  
        echo "##### $0: FILE $FILE INODE=$INODE PID $PID #####" >&2  
    else  
        PID=  
        INODE=  
        echo "##### $0: FILE $FILE NOT FOUND #####" >&2  
    fi  
}  
  
# 杀掉tail进程  
# usage: kill_tail  
kill_tail()  {  
    if [ "$PID" ]; then  
        kill -9 $PID  
    fi  
}  
  
# 检查inode是否变化了  
# usage: inode_changed  
inode_changed()  {  
    
    NEW_FILE="/data/logs/Khw-SSO/Khw-SSOException.log."$(date "+%Y-%m-%d") 

    NEW_INODE=$(stat -c "%i" "$NEW_FILE")  

    if [ "$INODE" == "$NEW_INODE" ]; then  
        return 1  
    else  
        INODE=$NEW_INODE  
    fi  
}  
  
# 设置陷阱，按Ctrl+C终止或者退出时杀掉tail进程  
trap "kill_tail; exit" SIGINT SIGTERM SIGQUIT EXIT  
  
# 首次启动tail -f进程  
fork_tail  
  
# 每隔一定时间检查文件的inode是否变化，如果变化就先杀掉原来的tail进程，重新启动tail进程  
while :  
do  
    sleep 1m  
    if inode_changed; then  
        kill_tail  
        fork_tail  
    fi  
done  
  
# END.  